#!/usr/bin/env python3
"""
添加示例数据到测试用例管理系统
"""

import os
import sys
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

# 设置Django设置模块
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')

import django
django.setup()

from projects.models import Project, Version
from cases.models import TestCase
from ai_integration.models import AITemplate, RequirementAnalysis


def add_sample_data():
    """添加示例数据到数据库"""
    print("开始添加示例数据...")
    
    # 检查并添加项目
    if Project.objects.count() == 0:
        print("添加项目数据...")
        project1 = Project.objects.create(
            name="电商平台系统",
            description="一个完整的电商平台，包含商品管理、订单处理、支付系统等",
            created_by="admin"
        )
        project2 = Project.objects.create(
            name="企业内部管理系统",
            description="企业内部人员、考勤、审批等管理功能",
            created_by="admin"
        )
        print(f"已添加 {Project.objects.count()} 个项目")
    else:
        project1 = Project.objects.first()
        project2 = Project.objects.last() if Project.objects.count() > 1 else project1
        print(f"已有 {Project.objects.count()} 个项目，跳过添加")
    
    # 检查并添加版本
    if Version.objects.count() == 0:
        print("添加版本数据...")
        Version.objects.create(
            project=project1,
            name="v1.0.0",
            description="电商平台第一版，基础功能",
            is_active=True
        )
        Version.objects.create(
            project=project1,
            name="v1.1.0",
            description="电商平台第二版，增加优惠券功能",
            is_active=True
        )
        Version.objects.create(
            project=project2,
            name="v2.0.0",
            description="企业管理系统新版",
            is_active=True
        )
        print(f"已添加 {Version.objects.count()} 个版本")
    else:
        print(f"已有 {Version.objects.count()} 个版本，跳过添加")
    
    # 定义模块名称（模块在TestCase中是CharField）
    module_names = {
        'project1': ['用户管理', '商品管理', '购物车'],
        'project2': ['人事管理', '考勤管理']
    }
    
    # 检查并添加测试用例
    if TestCase.objects.count() < 10:
        print("添加测试用例数据...")
        
        # 获取第一个版本
        version1 = Version.objects.first()
        
        # 添加多个测试用例
        TestCase.objects.create(
            version=version1,
            case_id="TEST-001",
            title="用户注册功能测试",
            description="验证用户注册流程的正确性",
            precondition="打开注册页面",
            steps="1. 输入用户名\n2. 输入密码\n3. 确认密码\n4. 点击注册按钮",
            expected_result="注册成功，自动登录并跳转至首页",
            actual_result="",
            status="draft",
            priority="high",
            created_by="admin",
            module="用户管理",
            test_method="equivalence"
        )
        
        TestCase.objects.create(
            version=version1,
            case_id="TEST-002",
            title="用户登录功能测试 - 正确密码",
            description="验证用户使用正确密码登录的功能",
            precondition="已有注册用户",
            steps="1. 输入正确的用户名\n2. 输入正确的密码\n3. 点击登录按钮",
            expected_result="登录成功，跳转至首页",
            actual_result="",
            status="reviewed",
            priority="high",
            created_by="admin",
            module="用户管理",
            test_method="equivalence"
        )
        
        TestCase.objects.create(
            version=version1,
            case_id="TEST-003",
            title="用户登录功能测试 - 错误密码",
            description="验证用户使用错误密码登录的反馈",
            precondition="已有注册用户",
            steps="1. 输入正确的用户名\n2. 输入错误的密码\n3. 点击登录按钮",
            expected_result="登录失败，提示错误信息",
            actual_result="",
            status="draft",
            priority="medium",
            created_by="admin",
            module="用户管理",
            test_method="equivalence"
        )
        
        TestCase.objects.create(
            version=version1,
            case_id="TEST-004",
            title="商品列表加载测试",
            description="验证商品列表页面加载性能和正确性",
            precondition="系统中存在商品数据",
            steps="1. 打开商品列表页\n2. 等待页面加载完成",
            expected_result="商品列表正确显示，无错误",
            actual_result="",
            status="reviewed",
            priority="high",
            created_by="admin",
            module="商品管理",
            test_method="boundary"
        )
        
        # 使用因果图法的测试用例
        TestCase.objects.create(
            version=version1,
            case_id="TEST-008",
            title="用户注册条件验证测试",
            description="验证用户注册时多个条件组合的有效性",
            precondition="无",
            steps="1. 尝试使用不同组合的用户名、密码和邮箱注册\n2. 观察系统反馈",
            expected_result="系统能够正确处理各种条件组合，符合预期逻辑",
            actual_result="",
            status="reviewed",
            priority="high",
            created_by="admin",
            module="用户管理",
            test_method="cause_effect"
        )
        
        # 使用正交法的测试用例
        TestCase.objects.create(
            version=version1,
            case_id="TEST-009",
            title="搜索功能参数组合测试",
            description="使用正交法测试搜索功能的不同参数组合",
            precondition="系统中存在搜索功能",
            steps="1. 根据正交表选择不同的搜索参数组合\n2. 执行搜索操作\n3. 验证搜索结果",
            expected_result="所有组合都能正常工作，覆盖主要场景",
            actual_result="",
            status="draft",
            priority="medium",
            created_by="admin",
            module="搜索功能",
            test_method="orthogonal"
        )
        
        # 使用流程图法的测试用例
        TestCase.objects.create(
            version=version1,
            case_id="TEST-010",
            title="购物流程完整测试",
            description="按照流程图验证完整的购物流程",
            precondition="用户已登录，商品已添加到购物车",
            steps="1. 进入购物车页面\n2. 选择要购买的商品\n3. 点击结算按钮\n4. 填写收货地址\n5. 选择支付方式\n6. 确认订单\n7. 完成支付",
            expected_result="能够成功完成整个购物流程，订单状态正确",
            actual_result="",
            status="reviewed",
            priority="high",
            created_by="admin",
            module="订单管理",
            test_method="flowchart"
        )
        
        TestCase.objects.create(
            version=version1,
            case_id="TEST-005",
            title="添加商品到购物车测试",
            description="验证商品添加到购物车的功能",
            precondition="已登录用户，在商品详情页",
            steps="1. 选择商品数量\n2. 点击'添加到购物车'按钮",
            expected_result="商品成功添加到购物车，显示成功提示",
            actual_result="",
            status="draft",
            priority="high",
            created_by="admin",
            module="购物车",
            test_method="equivalence"
        )
        
        TestCase.objects.create(
            version=Version.objects.filter(project=project2).first() if Version.objects.filter(project=project2).exists() else version1,
            case_id="TEST-006",
            title="员工信息添加测试",
            description="验证管理员添加员工信息的功能",
            precondition="管理员登录系统",
            steps="1. 进入员工管理页面\n2. 点击'添加员工'按钮\n3. 填写员工信息\n4. 点击'保存'按钮",
            expected_result="员工信息成功添加，显示成功提示",
            actual_result="",
            status="rejected",
            priority="medium",
            created_by="admin",
            module="人事管理",
            test_method="equivalence"
        )
        
        print(f"已添加 {TestCase.objects.count()} 个测试用例")
    else:
        print(f"已有 {TestCase.objects.count()} 个测试用例，跳过添加")
    
    # 检查并添加AI模板
    if AITemplate.objects.count() == 0:
        print("添加AI模板数据...")
        AITemplate.objects.create(
            name="测试用例生成模板",
            template_content="根据需求描述生成详细的测试用例。要求包含测试步骤、预期结果等内容。\n需求描述：{requirement}",
            description="用于生成测试用例的基础模板",
            created_by="admin"
        )
        AITemplate.objects.create(
            name="需求分析模板",
            template_content="分析以下需求，指出潜在的问题和改进点。\n需求：{requirement}",
            description="用于分析需求的模板",
            created_by="admin"
        )
        print(f"已添加 {AITemplate.objects.count()} 个AI模板")
    else:
        print(f"已有 {AITemplate.objects.count()} 个AI模板，跳过添加")
    
    # 检查并添加需求分析
    if RequirementAnalysis.objects.count() == 0:
        print("添加需求分析数据...")
        RequirementAnalysis.objects.create(
            project=project1,
            version=version1,
            requirement_text="用户应该能够通过手机号和验证码登录系统",
            analysis_result="1. 需要设计手机号格式验证\n2. 需要设计验证码发送和验证机制\n3. 需要考虑安全性，防止暴力破解",
            created_by="admin"
        )
        print(f"已添加 {RequirementAnalysis.objects.count()} 个需求分析")
    else:
        print(f"已有 {RequirementAnalysis.objects.count()} 个需求分析，跳过添加")
    
    print("示例数据添加完成！")
    print(f"当前数据统计：")
    print(f"- 项目数量: {Project.objects.count()}")
    print(f"- 版本数量: {Version.objects.count()}")
    
    print(f"- 测试用例数量: {TestCase.objects.count()}")
    print(f"- AI模板数量: {AITemplate.objects.count()}")
    print(f"- 需求分析数量: {RequirementAnalysis.objects.count()}")


if __name__ == "__main__":
    add_sample_data()